草庐IT

Swift 枚举评估

全部标签

c++ - 是否可以使用 std::byte 作为枚举类的基础类型?

由于std::byte根据定义不是整数类型,因此以下片段格式错误:enumclassfoo:std::byte{bar=1,baz=2};在C++17中有没有办法做与此等效的事情?编辑:我不是要解决任何特定问题。显然enumclasswhatever:unsignedchar可以做到。但是,我希望std::byte更灵活一点,并且想知道这是否可能。 最佳答案 std::byte是definedbythestandard成为一个枚举类。因此,它有一个基础类型(unsignedchar)。所以你可以创建一个具有相同底层类型的枚举:enu

来自 char 的 C++ 枚举

好的,我是C++的新手。我拿到了Bjarne的书,我正在尝试遵循计算器代码。但是,编译器会吐出关于此部分的错误:token_valueget_token(){charch;do{//skipwhitespaceexcept'\n'if(!std::cin.get(ch))returncurr_tok=END;}while(ch!='\n'&&isspace(ch));switch(ch){case';':case'\n':std::cin>>WS;//skipwhitespacereturncurr_tok=PRINT;case'*':case'/':case'+':case'-':c

c++ - typedef 结构和枚举,为什么?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicates:Purposeofstruct,typedefstruct,inC++typedefstructvsstructdefinitions在我维护的代码中,我经常看到以下内容:typedefenum{blah,blah}Foo;typedefstruct{blahblah}Bar;代替:enumFoo{blah,blah};structBar{blahblah};我一直使用后者,这是我第一次看到前者。所以问题是为什么一个人会使用一种风格而不是另一种风格。有什么好处吗?它们在功能上也相同吗?我相信他们是但不是10

java - 定义的参数评估顺序导致次优代码?

众所周知,c和c++中的参数求值顺序没有定义:例如:foo(a(),b())在上面的调用中,由编译器的实现来决定选择哪个求值顺序以及首先执行哪个函数。最近我的一位friend问为什么在C或C++中未指定求值顺序。当我用谷歌搜索时,我开始知道指定评估顺序会导致次优代码生成。但怎么会这样呢?为什么定义的参数评估顺序会导致次优代码?当我提到Java的参数评估顺序时。我在规范中发现了以下内容。15.7.4.ArgumentListsareEvaluatedLeft-to-RightInamethodorconstructorinvocationorclassinstancecreationex

c++ - 枚举 "does not name a type' 的问题

g++(Ubuntu/Linaro4.4.4-14ubuntu5)4.4.5我有一个问题,我似乎找到了我得到这个错误的方法。文件statemachine.h#ifndefSTATEMACHINE_H_INCLUDED#defineSTATEMACHINE_H_INCLUDED#include"port.h"enumstate{ST_UNINITIALIZED=0x01,ST_INITIALIZED=0x02,ST_OPENED=0x03,ST_UNBLOCKED=0x04,ST_DISPOSED=0x05};voidstate_machine(eventevt,port_t*port)

c++ - 在没有事先声明的情况下错误使用枚举?

我正在通过一本书学习C++,但以下示例在代码块中不起作用。我的编译器报错:useofenum'Days'withoutpreviousdeclaration有人可以在这里启发我吗?#includeusingnamespacestd;intmain()//mainroutine{inta;enumDays(zo,ma,di,wo,do,vr,za);//:useofenum'Days'withoutpreviousdeclarationDaystoday;today=ma;if(today==zo||today==za)cout 最佳答案

c++ - 专门用于枚举的模板

谁能告诉我为什么这不起作用?enumCompCriteria{ByKey,ByValue,ByeKeyAndValue};templatestructX;templatestructX{};int_tmain(intargc,_TCHAR*argv[]){Xx;return0;} 最佳答案 您将参数化类型和参数化值混为一谈。模板参数可以是类型或常量。例如:templatestructFoo;相对于..templatestructFoo;看起来您想根据枚举常量而非类型来专门化您的模板。意思是,你需要说:enumCompCriteria

c++ - 延迟评估和 const 正确性问题

我制作了一个openGL相机类,它使用惰性求值通过getter函数提供最终投影或模型-View-投影矩阵。用户在实例的整个生命周期中提供各种相机参数(FOV、位置等),而不是每次更改参数时都重新计算投影矩阵和/或MVP矩阵,而是设置“已更改”标志(即旧的缓存矩阵现在无效)。每当用户随后请求更新的最终矩阵时,都会重新计算它,缓存结果,并返回一个const引用。一切听起来都很好,直到我调用我:constQMatrix4x4&oE_GLCamera::getModelViewProjection()const;来自constoE_GLCamera实例的函数...我在我的应用程序中到处使用co

c++ - 打开枚举时的编译器警告

enumENUM(Option1,Option2,Option3);stringfunc(ENUMx){switch(x){caseOption1:return"Option1";caseOption2:return"Option2";caseOption3:return"Option3";}}这可以编译并运行,但会给出一个编译器警告,提示并非所有控制路径都返回。但是,如果您正确使用枚举,情况并非如此,这不是重点吗?如果添加另一个ENUMval,我希望编译失败,但只要涵盖所有情况,我希望它编译时没有警告。这是防止错误转换值的编译器吗,它只是C++的一部分并且需要忍受吗?

c++ - 我怎样才能部分特化所有枚举的类模板?

假设我有一些类模板:templateclass{//....}我可以通过以下方式为ALL指针部分特化此模板:templateclass{//....}我能以某种方式专门化ALL枚举的模板吗?即,做类似的事情:(虽然这不起作用)templateclass{//....} 最佳答案 使用C++11和SFINAE。#includetemplatestructSpecialize{};templatestructSpecialize::value>::type>{voidconvert(){}};enumE{};intmain(){Spec